package com.zp.self.module.level_4_算法练习.数据结构.数组;


public class 力扣_66_加一 {
    public static void main(String[] args) {
//        System.out.println(new 力扣_66_加一().plusOne(new int[]{1,2,3}));
//        System.out.println(new 力扣_66_加一().plusOne(new int[]{4,3,2,1}));
//        System.out.println(new 力扣_66_加一().plusOne(new int[]{0}));
        System.out.println(new 力扣_66_加一().plusOne(new int[]{9}));
//        System.out.println(new 力扣_66_加一().plusOne(new int[]{99}));

    }
    /**
     题目：给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
     最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
     你可以假设除了整数 0 之外，这个整数不会以零开头。

     示例 1：
     输入：digits = [1,2,3]
     输出：[1,2,4]
     解释：输入数组表示数字 123。

     示例 2：
     输入：digits = [4,3,2,1]
     输出：[4,3,2,2]
     解释：输入数组表示数字 4321。

     示例 3：
     输入：digits = [0]
     输出：[1]


     分析：
     1.从后向前遍历，进位，扩容情况后面将全是0创建新数组:new int[digits.length + 1]即可 -- 很优雅

     边界值 & 注意点：
     1.常规：123
     2.特殊：19
     3.极为特殊：99-- 需要扩容  ，list 转array
     **/
    public int[] plusOne(int[] digits) {
        //会出现的情况

        //尾部向前遍历：
        for (int i = digits.length-1; i >=0; i--) {
            if(digits[i]==9)digits[i] = 0;
            else{
                digits[i] += 1;return digits;
            }
        }
        //为3.极为特殊情况：99-- 需要扩容
        //优化：因为扩容后面 全为0  故：999... + 1 一定会是1000...  digits = new int[digits.length + 1]; digits[0] = 1;
        digits = new int[digits.length + 1];
/*        if(digits[0]==0){
            int[] ints = new int[digits.length + 1];
            ints[0] = 1;
            for (int i = 1; i < ints.length; i++) {
                ints[i] = digits[i-1];
            }
            return  ints;
        }*/
        return digits;
    }
}
